package cn.tm.ms.nerver.ft;

import cn.tm.ms.nerver.ft.entry.FaultTolerance;
import cn.tm.ms.nerver.ft.entry.ModuleConf;
import cn.tm.ms.nerver.ft.module.FtModuler;
import cn.tm.ms.nerver.ft.route.IRoute;
import cn.tm.ms.nerver.ft.support.FtSupport;

import com.netflix.hystrix.HystrixCommand.Setter;

/**
 * 容错核心拦截执行器
 * 
 * @author lry
 *
 * @param <REQ>
 * @param <RES>
 */
public class FtCoreHandler<REQ, RES> {
	
	public RES execute(FaultTolerance ft,REQ req, ModuleConf conf,IRoute<REQ, RES> route){
		//构建Setter
		Setter setter=FtSupport.buildByFaultTolerance(ft);
		
		//创建容错模块
		FtModuler<REQ, RES> ftModuler=new FtModuler<REQ, RES>(setter, req, conf, route);
		
		//同步调用
		RES res = ftModuler.execute();
		
		return res;
	}

}
